package entities;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import bd.ConexBD;

import clases.FondoMenu;
import clases.Obra;
import clases.Pedido;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import java.awt.FlowLayout;
import java.awt.Rectangle;

public class VentanaGestionObra extends JFrame implements ActionListener,ListSelectionListener, MouseListener {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1046441114940288452L;

	Ventana v;
	
	//private JPanel panelPrincipal;
	private JPanel panelSuperior;
	private JPanel panelCentral;
	private JPanel panelIzquierdo;
	private JPanel panelBotonera;
	
	private JList lnombres;
	JScrollPane scrollListaNombre;
	
	private JTable tabla;
	private JScrollPane scroll;
	private ArrayList<Obra> obras;
	private JButton bNuevoPedido;
	private JButton bModificarPedido;
	private JButton bBorrarPedido;
	private JButton bMenu;
	private JButton bNuevaObra;
	private JButton bBorrarObra;
	private JButton bModificarObra;

	public VentanaGestionObra(Ventana ventana) {
		// TODO Auto-generated constructor stub
		v=ventana;
		
		FondoMenu fondo=new FondoMenu(); // cambio de imagen a la ventana
		getContentPane().add(fondo, BorderLayout.CENTER);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		this.setVisible(true);
		this.setBounds(Toolkit.getDefaultToolkit().getScreenSize().width/2-800/2,Toolkit.getDefaultToolkit().getScreenSize().height/2-600/2, 800, 600);

		
		panelSuperior=  new JPanel();
		panelSuperior.setBackground(Color.WHITE);
		panelSuperior.setVisible(true);
		panelSuperior.setOpaque(false);
		
		panelCentral=new JPanel();
		panelCentral.setBackground(Color.WHITE);
		panelCentral.setVisible(true);
		panelCentral.setOpaque(false);
		
		panelIzquierdo=  new JPanel();
		panelIzquierdo.setVisible(true);
		panelIzquierdo.setOpaque(false);
		
		panelBotonera=  new JPanel();
		panelBotonera.setBackground(Color.WHITE);
		panelBotonera.setVisible(true);
		panelBotonera.setOpaque(false);
		
		
		bNuevoPedido = new JButton("Nuevo pedido");
		bNuevoPedido.addActionListener(this);
		
		bModificarPedido = new JButton("Modificar pedido");
		bModificarPedido.addActionListener(this);
		
		bBorrarPedido = new JButton("Borrar pedido");
		bBorrarPedido.addActionListener(this);
		
		bMenu = new JButton("Inicio");
		bMenu.addActionListener(this);
		
		bNuevaObra= new JButton("Nuevo obra");
		bNuevaObra.addActionListener(this);
		
		bModificarObra = new JButton("Modificar obra");
		bModificarObra.addActionListener(this);
		
		bBorrarObra = new JButton("Borrar obra");
		bBorrarObra.addActionListener(this);

		
		fondo.setLayout(new BorderLayout());
		fondo.add(panelSuperior, BorderLayout.NORTH);
		fondo.add(panelCentral, BorderLayout.CENTER);
		fondo.add(panelIzquierdo, BorderLayout.WEST);
		
		panelSuperior.add(panelBotonera);
		
		panelBotonera.add(bMenu);
		panelBotonera.add(bNuevoPedido);
		panelBotonera.add(bModificarPedido);
		panelBotonera.add(bBorrarPedido);
		panelBotonera.add(bNuevaObra);
		panelBotonera.add(bModificarObra);
		panelBotonera.add(bBorrarObra);
		
			
		lnombres= new JList();
		lnombres.addListSelectionListener(this);
		lnombres.addMouseListener(this);
		panelCentral.setLayout(new BorderLayout());
		
		String[] columTitulo =	{"Codigo obra", "Concepto", "Horas empleadas", "Localizacion","Estado","Fecha Inicio","Fecha Fin","Codigo Pedido","Presupuesto"};
	   	Object [][]data = new Object[12][9];	
		tabla = new JTable(data, columTitulo);
		
		
		scroll = new JScrollPane(tabla, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		panelCentral.add(scroll);
		scroll.setVisible(true);
		
		lnombres.setOpaque(false);
		scrollListaNombre = new JScrollPane( lnombres, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
		panelIzquierdo.setLayout( new BorderLayout() );
		panelIzquierdo.setOpaque(false);
		panelIzquierdo.add( scrollListaNombre, BorderLayout.CENTER);
		lnombres.addListSelectionListener( this );
		lnombres.addMouseListener(this);
		
		cargarLista();
	}
    
	
	public void cargarLista(){
    ConexBD prueba = ConexBD.getInstance();
		
		try {
			prueba.conectar();
			List<Pedido> listaPedidos = prueba.listaPedidos();
			DefaultListModel modelo = new DefaultListModel();
			for (Pedido p:listaPedidos)
				modelo.addElement(p.getDENOMPedido());
			lnombres.setModel(modelo);
			prueba.desconectar();
			
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("Algun error con la conexion BD");
			e.printStackTrace();
		}
	}
	
	
	 // listener de la lista  lo que hace es crear la tabla de la derecha
	 public void consultaTrabajo(){
		 
	     String nombre= (String) lnombres.getSelectedValue();	
			
	     ConexBD prueba = ConexBD.getInstance();
	     
		try {
			prueba.conectar();
			 obras = prueba.datosObras(nombre);
			prueba.desconectar();
			TableModel modelo = tabla.getModel();
			int fila=0;
			
			for (Obra o:obras) // cargo la tabla con la jlist devuelta por la bd
			{
				modelo.setValueAt(o.getCODObra(), fila, 0);
				modelo.setValueAt(o.getConcepto(), fila, 1);
				modelo.setValueAt(Double.toString(o.getNumHoras()), fila, 2);
				modelo.setValueAt(o.getLugarRealizacion(), fila, 3);
				modelo.setValueAt(o.getEstado(), fila, 4);
				modelo.setValueAt(o.getFechaInicio(), fila, 5);
				modelo.setValueAt(o.getFechaFin(), fila, 6);
				modelo.setValueAt(o.getCODPedido(), fila, 7);
				modelo.setValueAt(Double.toString(o.getPresupuesto()), fila, 8);
				fila++;
			}// refresco de los datos de las filas restantes vacias
			while(fila<modelo.getRowCount()){ 
				modelo.setValueAt("", fila, 0);
				modelo.setValueAt("", fila, 1);
				modelo.setValueAt("", fila, 2);
				modelo.setValueAt("", fila, 3);
				modelo.setValueAt("", fila, 4);
				modelo.setValueAt("", fila, 5);
				modelo.setValueAt("", fila, 6);
				modelo.setValueAt("", fila, 7);
				modelo.setValueAt("", fila, 8);
				fila++;
			}
			
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("Algun error con la conexion BD");
			e.printStackTrace();
		}
		
	}
	
	
	
	
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
		 if (e.getSource().equals(bNuevaObra)){
			 /*DefaultListModel modelo = new DefaultListModel();
			 modelo=(DefaultListModel) lnombres.getModel();
			 int a= lnombres.getSelectedIndex();
			 Obra o=(Obra) modelo.get(a);*/

			 if (lnombres.getSelectedIndex()!=-1)
				{
					//modifico los datos
					String nombrePedido = (String) lnombres.getSelectedValue();
					
					ConexBD prueba = ConexBD.getInstance();
					Pedido pedido = null;
					String s = null;
					
					try {
						prueba.conectar();
						pedido = prueba.buscarPedido(nombrePedido);
						s=pedido.getCODPedido();
						prueba.desconectar();
						
					} catch (ClassNotFoundException | SQLException e1) {
						// TODO Auto-generated catch block
						System.out.println("Algun error con la conexion BD");
						e1.printStackTrace();
					}
			 
					VentanaNuevaObra nTra = new VentanaNuevaObra(this,null,s);
					this.setVisible(false);
				}else{
					JOptionPane.showMessageDialog (this,"Tienes que seleccionar un trabajo de la lista");
				}
		 }else if(e.getSource().equals(bNuevoPedido)){
			 VentanaNuevoPedido nP = new VentanaNuevoPedido(this,null);
			 this.setVisible(false);
		}else if (e.getSource().equals(bModificarPedido)){
				System.out.println("bmodificar");	
				if (lnombres.getSelectedIndex()!=-1)
				{
					//modifico los datos
					String nombrePedido = (String) lnombres.getSelectedValue();
					
					ConexBD prueba = ConexBD.getInstance();
					Pedido pedido = null;
					
					try {
						prueba.conectar();
						pedido = prueba.buscarPedido(nombrePedido);
						prueba.desconectar();
						
					} catch (ClassNotFoundException | SQLException e1) {
						// TODO Auto-generated catch block
						System.out.println("Algun error con la conexion BD");
						e1.printStackTrace();
					}
					
					VentanaNuevoPedido nTra = new VentanaNuevoPedido(this,pedido);
					this.setVisible(false);
					
				}	
				else{
					JOptionPane.showMessageDialog (this,"Tienes que seleccionar un trabajo de la lista");
				}
		}else if(e.getSource().equals(bModificarObra)){
			ConexBD prueba = ConexBD.getInstance();
			
			TableModel tm = tabla.getModel();
			String nombreObra = String.valueOf(tm.getValueAt( tabla.getSelectedRow(),tabla.getSelectedColumn()));
			Obra obra=null;
			try {
				prueba.conectar();
				obra = prueba.buscarObra(nombreObra);
				prueba.desconectar();
			} catch (ClassNotFoundException | SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			VentanaNuevaObra nTra = new VentanaNuevaObra(this,obra,null);
			 this.setVisible(false);
				
			
		}else if(e.getSource().equals(bMenu)){
			this.setVisible(false);
			v.setVisible(true);
		}else if(e.getSource().equals(bBorrarObra)){
			
			TableModel tm = tabla.getModel();
			String nombreObra = String.valueOf(tm.getValueAt( tabla.getSelectedRow(),tabla.getSelectedColumn()));
			ConexBD prueba = ConexBD.getInstance();
			try {
				prueba.conectar();
				prueba.borrarObra(nombreObra);
				prueba.desconectar();
				
			} catch (ClassNotFoundException | SQLException e1) {
				// TODO Auto-generated catch block
				System.out.println("Algun error con la conexion BD");
				e1.printStackTrace();
			}
			
			consultaTrabajo();
			
		}else{
			//eliminar el trabajo de la bd y de la lista
			if (lnombres.getSelectedIndex()!=-1)
			{
				String p = (String) lnombres.getSelectedValue()/*tendria que sacar que es el que selecciono*/;
				ConexBD prueba = ConexBD.getInstance();
				try {
					prueba.conectar();
					prueba.borrarObra(p);
					int conta =0;
					while (obras.get(conta)!=null){
						if (p==obras.get(conta).getConcepto()){
							obras.remove(conta);
						}
						
						conta ++;
					}
					prueba.desconectar();
	
					
				} catch (ClassNotFoundException | SQLException e1) {
					// TODO Auto-generated catch block
					System.out.println("Algun error con la conexion BD");
					e1.printStackTrace();
				}
				cargarLista();
				
				
			}else{
				JOptionPane.showMessageDialog (this,"Tienes que seleccionar un trabajo de la lista");
			}
		}
		
	}

	@Override
	public void valueChanged(ListSelectionEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		consultaTrabajo();
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
		
	}


